#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "air32f10x_conf.h"
#include "printf.h"
#include "sys.h"
#include "usart1.h"
#include "w25qxx.h"
#include "led.h"
#include "dac1.h"
#include "tim2.h"
#include "tim4.h"
#include "tim5.h"
#include "volleyball.h"
#include "curtain.h"
#include "help_curtain.h"
#include "5m3x.h"
#include "old5m3x.h"

int main(void)
{
    RCC_ClkConfiguration();         // 配置时钟
    Delay_Init();                   // 初始化Systick用于延时函数
    led_init();                     // 显示屏初始化
    w25qxx_init();                  // flash芯片初始化
    flash_w25qxx(2000000);          // 询问是否要编程flash
    dac1_gpio_init();               // 语音播放初始化
    dac1_init();                    // 同上
    tim2_init();                    // 同上，用于给dac提供时钟，一般是22050
    dac1_dma_init();                // 同上
    dac1_read_flash_sound_list();   // 读取存在flash中的文件列表
    tim5_init();                    // 100us跳动一次，6.5秒中断一次
    Delay_ms(100);                  // 等待从机稳定
    usart1_init_with_RXNE(BAUD_1M); // 默认1M通讯
    // 设置波特率，第四位为1表示4M通讯，为0表示1M通讯
    uint8_t jump = read_extra_jump_states();

    // 选择功能
    switch (jump)
    {
    case 0x00: // 排球程序
        poweron_sequence_for_volleybal();
        break;

    case 0x01: // 五三程序
        poweron_sequence_for_5m3x();
        break;

    case 0x02: // 旧五三程序
        poweron_sequence_for_old5m3x();
        break;

    case 0x04: // 光线通断实时显示
        curtains_light_status_display(6, 0, 6000, 2200, 0);
        break;

    case 0x08: // 光线通断历史显示
        curtains_light_status_display_with_history(6, 0, 6000, 2200, 0);
        break;

    default: // 485通讯测试
        curtains_485_test(6);
        break;
    }
}